

package com.hazelcast.internal.util.phonehome;

import com.hazelcast.instance.impl.Node;
import com.hazelcast.internal.cluster.impl.ClusterServiceImpl;

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;

import static com.hazelcast.internal.util.phonehome.PhoneHomeMetrics.*;

/**
 * Provides information about the running cluster
 */
class ClusterMetricsProvider implements MetricsProvider {

    @Override
    public void provideMetrics(Node node, MetricsCollectionContext context) {
        ClusterServiceImpl clusterService = node.getClusterService();
        int clusterSize = clusterService.getMembers().size();
        long clusterUpTime = clusterService.getClusterClock().getClusterUpTime();
        int partitionCount = node.getPartitionService().getPartitionCount();
        RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();

        context.collect(UUID_OF_CLUSTER, node.getThisUuid());
        context.collect(CLUSTER_ID, clusterService.getClusterId());
        context.collect(CLUSTER_SIZE, MetricsProvider.convertToLetter(clusterSize));
        context.collect(EXACT_CLUSTER_SIZE, clusterSize);
        context.collect(TIME_TAKEN_TO_CLUSTER_UP, clusterUpTime);
        context.collect(UPTIME_OF_RUNTIME_MXBEAN, rt.getUptime());
        context.collect(RUNTIME_MXBEAN_VM_NAME, rt.getVmName());
        context.collect(PARTITION_COUNT, partitionCount);
    }
}
